/**
 * CCLIOT库函数声明
 * 文件名称：	IOTNetAPI.java
 * 文件版本：	V22
 * 修改日期：	2017-04-24
 */
package com.ccl.iot;

import com.ccl.iot.object.IOTDeviceIP;

public class IOTNetAPINative extends IOTNetAPIEnum {
    static {
        System.loadLibrary("IOTNetAPI");
    }
    
/**
 * 获取当前SDK版本号。
 * 版本号格式为32位整型，相应位标识如下:
 * <p>
 * 			25~32位	|	17~24位	|		9~16位		|	1~8位
 * </p>
 * <p>
 *		主版本号	|	次版本号	|	内部版本号	|	修订号
 * </p>
 * @return SDK版本号
 */
protected static native int IOTGetVersion();

/*
 * Smart connect functions
 */
/**
 * 启动智能设备连接广播。
 * 启动广播后当前设备将不断地向WIFI覆盖区域广播专用协议编码后的SSID及密码，支持连接协议的设备在收到并解码后使用其所提供的SSID及密码连接指定的接入点。
 * @param aProtocol	-	智能连接协议类型，默认为0
 * @param aSSID	-	智能连接将接入的WIFI接入点SSID
 * @param aSSIDLen	-	WIFI接入点SSID长度
 * @param aPwd	-	WIFI接入点密码
 * @param aPwdLen	-	WIFI接入点密码长度
 * @param aPrintProgress	-	打印连接过程开关。0为不打印；1为打印
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTSMConnStart(int aProtocol, byte[] aSSID, int aSSIDLen, byte[] aPwd, int aPwdLen, int aPrintProgress);
/**
 * 停止智能设备连接广播。
 * @param aProtocol	-	智能连接协议类型，默认为0
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTSMConnStop(int aProtocol);

/*
 * Base API functions
 */
/**
 * 初始化SDK，此为设备通讯SDK入口。
 * 设备退出时请自行调用{@link #IOTCleanup}函数清理相关资源
 * 注：当作为子服务器或多用户应用情况下请勿开启调整缓存，以免数据过大影响本地系统效率
 * @param aDBPath	-	本地信息数据库路径，用于存储服务器中用户或设备相关信息备份，以加速信息的获取速度，传入null表示使用程序默认数据目录
 * @param aCache	-	本地数据库高速缓存，用于在内存中映射一份本地信息数据库数据，更高效地获取数据，传入null表示不缓存同时不生成本地临时数据库
 * @param aCacheSize	-	本地数据库高速缓存大小，在分配aCache时所指定的大小，传入0表示不缓存同时不生成本地临时数据库
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTInit(byte[] aDBPath, byte[] aCache, int aCacheSize);
/**
 * 清理设备通讯SDK相关资源，建议在程序完全退出时调用，非完全退出建议调用{@link #IOTShutdown}函数。
 */
protected static native void IOTCleanup();

/**
 * 获取本地信息数据库文件大小。
 * @return 本地信息数据库文件大小，单位：字节
 */
protected static native long IOTGetDBFileSize();
/**
 * 复位本地信息数据库，删除已缓存的数据库文件及高速缓存数据。
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRestoreDB();

/**
 * 设置用户登录结果回调，当用户未登录、登录成功或登录失败时传入的回调函数将会被调用。
 * @param aLoginResultCallback	-	接收登录结果的回调函数
 */
protected static native void IOTSetLoginResultCallBack(IOTCallback.LoginResultCallback aLoginResultCallback);

/**
 * 设置系统通知回调。
 * @param aNotifyCallback	-	接收系统通知的回调函数
 */
protected static native void IOTSetNotifyCallBack(IOTCallback.NotifyCallback aNotifyCallback);

/**
 * 独占设备通讯线程锁。适用于多线程编程中，单一线程需执行较长时间设备通讯过程而不希望其它线程占用设备通讯功能时使用。
 * 使用完毕后务必调用{@link #IOTThreadUnlock}以保证其它线程可继续使用设备通讯功能
 */
protected static native void IOTThreadLock();
/**
 * 解除独占设备通讯线程锁，在调用{@link #IOTThreadLock}后不需要占用时调用。
 */
protected static native void IOTThreadUnlock();

/**
 * 启动设备通讯接口，接口启动后由调用者通过循环调用{@link #IOTPeriod}函数周期性进行保持接口通讯。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTStartup();
/**
 * 停止设备通讯接口，暂停网络通讯及清除临时缓存数据。建议在程序转入后台时调用。
 */
protected static native void IOTShutdown();

/**
 * 启动一次性快速服务器通讯接口，接口启动后用户可在10秒内调用任何与服务器通讯的API函数完成通讯，完成一次通讯后则自动停止。
 * 注：	1、调用此函数前SDK必须已经完成初始化({@link #IOTInit})，同时当前环境设备已经完成初始化及有成功登录的用户信息；
 *		2、调用此函数时标准设备通讯接口必须已停止，否则将无法启动；
 *		3、调用此函数返回结果前请勿调用{@link #IOTStartup}启动标准设备通讯接口，否则可能造成不可预料的后果；
 *		4、接口有效时间为10秒，但可能因代码及相关回调处理的不及时造成实际可用时间不足10秒，因此函数调用后请及时完成需要的通讯；
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTStartOneshot();
/**
 * 获取一性性快速服务器通讯接口的准备状态。
 * @return 0表示未就绪，非0表示已就绪
 */
protected static native int IOTOneshotReady();

/**
 * 进行设备通讯接口周期性维护，函数内部处理过程包括接收来自网络的数据、连接心跳及重新连接等。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTPeriod();

/**
 * 查询设备是否使用服务器功能。
 * 注：初始化SDK时(即调用IOTInit函数)默认为使用服务器的功能
 * @return 0表示使用服务器功能，非0表示不使用服务器功能
 */
protected static native int IOTIsServerDisabled();

/**
 * 设置是否使用服务器的功能。
 * @Warning 不使用服务器的功能将使大部分IOTAPI无法执行，因此请确认只需在局域网内控制设备时才不使用
 * @param aEnabled	-	0表示使用服务器功能，非0表示不使用服务器功能
 */
protected static native void IOTSetServerDisabled(int aDisabled);

/**
 * 获取服务器IP地址。
 * 注：默认的服务器IP地址在调用IOTStartup后会自动从可选服务器清单中获取并可能随时改变，但此接口只返回调用IOTSetServerIP所设置值
 * @return 服务器IP地址，详见：{@link IOTDeviceIP}
 */
protected static native int IOTGetServerIP();

/**
 * 设置服务器IP地址。
 * @param aIP	-	服务器IP地址，详见：{@link IOTDeviceIP}
 */
protected static native void IOTSetServerIP(int aIP);

/**
 * 获取设备通讯接口的广播功能有效性。
 * @return 0表示广播功能不可用，非0表示广播功能可用
 */
protected static native int IOTIsBroadcastEnabled();

/**
 * 设置设备通讯接口的广播功能有效性。
 * 注：初始化SDK时(即调用{@link #IOTInit}函数)会自动将广播功能设置为可用
 * @param aEnabled	-	0表示广播功能不可用，非0表示广播功能可用
 */
protected static native void IOTSetBroadcastEnabled(int aEnabled);

/**
 * 获取设备通讯接口的广播IP地址。
 * 注：如用户未调用过IOTSetBroadcastIP进行设置时，初始化SDK(即调用IOTInit函数)会自动设置为255.255.255.255，当广播接口被首次初始化成功后将自动设置成活动的子网播放IP
 * @return 广播IP地址，详见：{@link IOTDeviceIP}
 */
protected static native int IOTGetBroadcastIP();

/**
 * 设置设备通讯接口的广播IP地址。
 * @param aIP	-	广播IP地址，详见：{@link IOTDeviceIP}
 */
protected static native void IOTSetBroadcastIP(int aIP);

/**
 * 获取设备通讯接口的局域网连接状态。
 * @return 0表示局域网通讯功能不可用，非0表示局域网通讯功能可用
 */
protected static native int IOTLocalReady();
/**
 * 获取设备通讯接口的厂域网连接状态，即是否已成功登录到CCLIOT服务器。
 * @return 0表示厂域网通讯功能不可用，非0表示厂域网通讯功能可用
 */
protected static native int IOTRemoteReady();

/**
 * 获取当前设备唯一ID，此ID在设备第一次调用{@link #IOTStartup}时由CCLIOT服务器自动分配。
 * @return 非0的64位设备唯一ID
 */
protected static native long IOTGetDeviceID();

/*
 * Mix IOT functions
 */
/**
 * 检测指定的设备是否在线，在线状态可能通过局域网广播或从CCLIOT服务器返回。
 * @param aDevID	-	需检测在线状态的设备ID
 * @param aOnline	-	输出参数。返回0时表示设备不在线，返回非0时表示设备在线
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link #IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @param aNetwork	-	操作此函数所使用的通讯网络。详见：EIOTNETWORK_TYPE
 * @return
 */
protected static native int IOTCheckDeviceOnline(long aDevID, int[] aOnline, long aAuthID, int aNetwork);

/**
 * 设置局域网设备信息广播回调函数。当搜索设备时局域网内设备返回，或局域网内有新上线设备时的自动返回。
 * @param aDeviceInfoCallback	-	接收设备信息的回调函数
 */
protected static native void IOTSetDeviceInfoCallBack(IOTCallback.DeviceInfoCallback aDeviceInfoCallback);

/**
 * 设置与当前用户有关的设备权限信息回调接收函数。当调用{@link #IOTAuthCheck}函数时局域网内设备返回，或授权状态改变时由CCLIOT服务器通知。
 * @param aAuthStateCallback	-	接收权限信息的回调函数
 */
protected static native void IOTSetAuthStateCallBack(IOTCallback.AuthStateCallback aAuthStateCallback);
/**
 * 查询指定设备开放给当前或授权用户的权限
 * @param aDevID	-	需查询权限的设备ID
 * @param aAuthState	-	输出参数。设备开放给当前用户的权限，详见：EAUTH_STATE
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link #IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @param aNetwork	-	操作此函数所使用的通讯网络。详见：EIOTNETWORK_TYPE
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTAuthCheck(long aDevID, int[] aAuthState, long aAuthID, int aNetwork);

/**
 * 设置设备寄存器数据改变回调函数。当局域网内设备寄存器数据改变时返回，或监控中的设备寄存器数据改变时由CCLIOT服务器通知
 * @param aRegDataCallback	-	接收设备寄存器改变的回调函数
 */
protected static native void IOTSetRegDataCallBack(IOTCallback.RegDataCallback aRegDataCallback);
/**
 * 读取指定设备的寄存器数据。
 * <p>注意：只有拥有对设备的读取权限方可读取其寄存器数据</p>
 * @param aDevID	-	需读取寄存器数据的设备ID
 * @param aAddress	-	需读取的寄存器起始地址
 * @param aSize	-	输入兼输出参数。输入时表示aData参数的缓冲区大小，输出时表示读取到的寄存器内容尺寸
 * @param aData	-	输出参数。读取到的设备寄存器数据，内容尺寸为aSize
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link #IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @param aNetwork	-	操作此函数所使用的通讯网络。详见：EIOTNETWORK_TYPE
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTReadReg(long aDevID, short aAddress, short[] aSize, byte[] aData, long aAuthID, int aNetwork);
/**
 * 改变指定设备的寄存器数据。
 * <p>注意：只有拥有对设备的写入权限方可改变其寄存器数据</p>
 * @param aDevID	-	需改变寄存器数据的设备ID
 * @param aAddress	-	需读取的寄存器起始地址
 * @param aSize	-	需要改变的寄存器数据大小(aData参数的缓存大小)
 * @param aData	-	输入参数。需改变的寄存器数据
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link #IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @param aNetwork	-	操作此函数所使用的通讯网络。详见：EIOTNETWORK_TYPE
 * @param aIgnoreResponse	-	决定是否忽略等待写寄存器结果返回。1为不等待，0为等待
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTWriteReg(long aDevID, short aAddress, short aSize, byte[] aData, long aAuthID, int aNetwork, int aIgnoreResponse);

/*
 * Local IOT functions
 */
/**
 * 查询局域网中设备的网络地址信息，包括IP地址及MAC地址。
 * <p>注意：此函数将产生200~1000毫秒的线程阻塞，请避免在UI线程中调用而影响体验</p>
 * @param aDevID	-	需查询的设备ID，可通过输入0一次性查询局域网内所有的设备网络信息
 * @param aAddressCallback	-	指定接收地址信息的回调函数
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTQueryAddress(long aDevID, IOTCallback.AddressInfoCallback aAddressCallback);

/**
 * 启动定位信标获取指定设备与局域网内支持定位的设备之间的距离。支持同时启动8个信标。
 * @param aMAC	-	指定需要获取距离信息的设备MAC地址，一般情况下应使用当前设备的MAC地址。此参数必须指定且不能为NULL
 * @param aInterval	-	定位信标发送定位信号的间隔（单位：毫秒），间隔越小定位越准确，但占用网络资源越多。最小值为100，建议值为1000
 * @param aPrintProgress	-	指定发送定位信号过程是否打印过程信息。0为不打印，非0为打印
 * @param aBeaconCallbacck	-	指定收到定位数据的回调函数
 * @return 0~7表示成功被启动的信标编号，其它值表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTStartBeacon(byte[] aMAC, int aInterval, int aPrintProgress, IOTCallback.BeaconCallback aBeaconCallback);
/**
 * 停止定位信标。
 * <p>注意：此函数的调用将造成阻塞直至信标线程完全停止，具体的阻塞时间与{@link #APIStartBeacon}时的参数aInterval相关</p>
 * @param aIndex	-	信标索引号，调用{@link #IOTStartBeacon}返回的值
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTStopBeacon(int aIndex);

/**
 * 搜索局域网内在线的设备，相关设备的信息将通过{@link #IOTSetDeviceInfoCallBack}函数所设置的回调函数接收。
 * <p>注意：此函数将产生200~1000毫秒的线程阻塞，请避免在UI线程中调用而影响体验</p>
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTScanDevice();
/**
 * 重启指定的设备。
 * <p>注：只有设备的拥有者方可重启设备</p>
 * <p>注意：为安全考虑，此函数至少需要在调用3次或以上，每次调用间隔在10秒内，当结果返回EIOT_RESULT_GENERAL_TRY_AGAIN时即表示需要继续调用</p>
 * @param aDevID	-	需重启的设备ID
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRequestSystemReset(long aDevID);
/**
 * 重置指定的设备至出厂状态(权限状态不受影响)。
 * <p>注：只有设备的拥有者方可重置设备</p>
 * <p>注意：为安全考虑，此函数至少需要在调用3次或以上，每次调用间隔在10秒内，当结果返回EIOT_RESULT_GENERAL_TRY_AGAIN时即表示需要继续调用</p>
 * @param aDevID	-	需重置的设备ID
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRequestSystemRestore(long aDevID);

/*
 * Remote IOT functions
 */
/**
 * 从CCLIOT服务器中获取一个唯一的安全校验码，此安全码用于用户注册或更改密码等关系到用户账户隐私及安全性操作中。
 * 安全码将有函数执行成功后将由CCLIOT服务器自动发送至指定的安全信息接受体(aSecurityInfo及aSecurityInfo)中，如短信息或电子邮箱。
 * 同时安全检验码的有效时限为10分钟。超过时限后需重新获取。
 * @param aLanguage	-	指定接受信息的主体接收到的信息所使用的语言，通过IOTGetLanguageIntID取得
 * @param aSecurityInfoType	-	安全信息接受体类型。0为移动手机，1为电子邮箱。目前CCLIOT服务器只支持电子邮箱
 * @param aSecurityInfo	-	安全信息接受体内容。如移动手机号码或电子邮箱地址
 * @param aSecurityInfoLength	-	安全信息接受体内容长度
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetSecurityCode(short aLanguage, short aSecurityInfoType, byte[] aSecurityInfo, short aSecurityInfoLength);
/**
 * 验证唯一安全校验码的有效性
 * @param aSecurityInfoType	-	安全信息接受体类型。0为移动手机，1为电子邮箱。目前CCLIOT服务器只支持电子邮箱
 * @param aSecurityInfo	-	安全信息接受体内容。如移动手机号码或电子邮箱地址
 * @param aSecurityInfoLength	-	安全信息接受体内容长度
 * @param aSecurityCode	-	安全信息接受体所接收到的有效安全校验码
 * @return	0表示检验码有效，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTVerifySecurityCode(short aSecurityInfoType, byte[] aSecurityInfo, short aSecurityInfoLength, int aSecurityCode);

/**
 * 	向CCLIOT服务器注册一个新用户。
 * 调用此函数前需调用{@link #IOTGetSecurityCode}获取一个有效有安全检验码作为转入参数
 * @param aUserName	-	需注册的用户名称，以英文字符、数字及下划线组成的小于32位的字符串
 * @param aUserNameLength	-	用户名称长度
 * @param aPassword	-	用户密码，任何ASCII字符组成的小于32位的字符串
 * @param aPasswordLength	-	密码长度
 * @param aMobile	-	移动手机号码
 * @param aMobileLength	-	移动手机号码长度
 * @param aEMail	-	电子邮箱
 * @param aEMailLength	-	电子邮箱长度
 * @param aFPQuestion	-	忘记密码问题
 * @param aFPQLength	-	忘记密码问题长度
 * @param aFPAnswer	-	忘记密码答案
 * @param aFPALength	-	忘记密码答案长度
 * @param aSecurityCode	-	安全校验码，由{@link #IOTGetSecurityCode}生成
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTUserRegister(byte[] aUserName, short aUserNameLength, byte[] aPassword, short aPasswordLength, 
							 byte[] aMobile, short aMobileLength, byte[] aEMail, short aEMailLength, 
							 byte[] aFPQuestion, short aFPQLength, byte[] aFPAnswer, short aFPALength, int aSecurityCode);

/**
 * 以指定的用户信息从CCLIOT服务器中请求对当前设备有效的操作授权码。
 * 由于每台设备只允许登录一个用户，当用于子服务器或多账号应用开发时，使用此函数请求对其它账号的授权码，只需将请求返回的aAuthID填入相应的操作函数中即可以非当前登录用户的权限进行相关操作
 * @param aUserName	-	用户名称
 * @param aUserNameLength	-	用户名称长度
 * @param aPassword	-	用户密码
 * @param aPasswordLength	-	用户密码长度
 * @param aAuthID	-	输出参数。服务器返回的操作授权码，只可在当前登录的设备使用
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRequestAuthID(byte[] aUserName, short aUserNameLength, byte[] aPassword, short aPasswordLength, long aAuthID[]);
/**
 * 从CCLIOT服务器中移除对当前设备有效的操作授权码。
 * @param aAuthID	-	要取消权限的操作授权码
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTCancelAuthID(long aAuthID);

/**
 * 以指定的用户登录至CCLIOT服务器中。
 * 正常情况下SDK将在文件系统中加密保存用户的登录信息，当用户未调用{@link #IOTLogout}的前提下重新启动SDK将不需要再次登录
 * @param aUserName	-	用户名称
 * @param aUserNameLength	-	用户名称长度
 * @param aPassword	-	用户密码
 * @param aPasswordLength	-	用户密码长度
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTLogin(byte[] aUserName, short aUserNameLength, byte[] aPassword, short aPasswordLength);
/**
 * 注销当前登录的用户。
 * 程序如果在退出时未调用此函数，那么再次启动时将无需输入用户名及密码
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTLogout();

/**
 * 获取当前登录的用户唯一ID。此ID在用户注册时由CCLIOT服务器自动分配。
 * 此信息源于文件系统中所保存的数据，只要未调用{@link #IOTLogout}，那么即使未成功登录至服务器也可返回最后一次正常登录的用户ID
 * @return	非0的64位用户唯一ID
 */
protected static native long IOTGetLogonUser();
/**
 * 获取当前登录的用户名称。
 * 此信息源于文件系统中所保存的数据，只要未调用{@link #IOTLogout}，那么即使未成功登录至服务器也可返回最后一次正常登录的用户名称
 * @param aUserName	-	输出参数。用户名称字符串
 * @param aUserNameLength	-	输入兼输出参数。输入时表示aUserName参数的缓冲区大小，输出时表示aUserName中有效的字符串长度
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetLogonUserName(byte[] aUserName, short[] aUserNameLength);

/**
 * 复位用户密码。
 * 调用此函数前需调用{@link #IOTGetSecurityCode}获取一个有效有安全检验码作为转入参数
 * @param aLanguage	-	指定接受信息的主体接收到的信息所使用的语言，通过IOTGetLanguageIntID取得
 * @param aSecurityInfoType	-	安全信息接受体类型。0为移动手机，1为电子邮箱。目前CCLIOT服务器只支持电子邮箱
 * @param aUserName	-	需复位的用户名称
 * @param aUserNameLength	-	用户名称长度
 * @param aSecurityInfo	-	安全信息接受体内容。如移动手机号码或电子邮箱地址
 * @param aSecurityInfoLength	-	安全信息接受体内容长度
 * @param aSecurityCode	-	安全校验码，由IOTGetSecurityCode生成
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTResetPassword(short aLanguage, short aSecurityInfoType, byte[] aUserName, short aUserNameLength, byte[] aSecurityInfo, short aSecurityInfoLength, int aSecurityCode);
/**
 * 获取忘记密码问题。
 * @param aUserName	-	用户名称
 * @param aUserNameLength	-	用户名称长度
 * @param aSecurityInfo	-	安全信息内容。如移动手机号码或电子邮箱账号
 * @param aSecurityInfoLength	-	安全信息内容长度
 * @param aFPQuestion	-	输出参数。忘记密码的问题
 * @param aFPQLength	-	输入兼输出参数。输入时表示aFPQuestion参数的缓冲区大小，输出时表示aFPQuestion中有效的字符串长度
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetFPQuestion(byte[] aUserName, short aUserNameLength, byte[] aSecurityInfo, short aSecurityInfoLength, byte[] aFPQuestion, short[] aFPQLength);
/**
 * 通过原有密码修改当前登录或授权用户的密码。
 * @param aOldPwd	-	原有密码
 * @param aOldPwdLength	-	原有密码长度
 * @param aNewPwd	-	新的密码，任何ASCII字符组成的小于32位的字符串
 * @param aNewPwdLength	-	新的密码长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link #IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTChangePasswordByOld(byte[] aOldPwd, short aOldPwdLength, byte[] aNewPwd, short aNewPwdLength, long aAuthID);
/**
 * 通过忘记密码答案修改用户密码。
 * 此函数一般情况结合{@link #IOTGetFPQuestion}先获取到忘记密码问题，然后在用户输入忘记密码答案后调用。
 * @param aUserName	-	需修改的用户名称
 * @param aUserNameLength	-	用户名称长度
 * @param aFPAnswer	-	忘记密码的答案
 * @param aFPAnswerLength	-	忘记密码的答案长度
 * @param aNewPwd	-	新的密码，任何ASCII字符组成的小于32位的字符串
 * @param aNewPwdLength	-	新的密码长度
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTChangePasswordByAnswer(byte[] aUserName, short aUserNameLength, byte[] aFPAnswer, short aFPAnswerLength, byte[] aNewPwd, short aNewPwdLength);
/**
 * 修改用户信息。
 * 调用此函数前需调用{@link #IOTGetSecurityCode}获取一个有效有安全检验码作为转入参数
 * @param aUserName	-	需更改的用户名称，以英文字符、数字及下划线组成的小于32位的字符串
 * @param aUserNameLength	-	用户名称长度
 * @param aPassword	-	用户密码，任何ASCII字符组成的小于32位的字符串
 * @param aPasswordLength	-	密码长度
 * @param aMobile	-	移动手机号码
 * @param aMobileLength	-	移动手机号码长度
 * @param aEMail	-	电子邮箱
 * @param aEMailLength	-	电子邮箱长度
 * @param aFPQuestion	-	忘记密码问题
 * @param aFPQLength	-	忘记密码问题长度
 * @param aFPAnswer	-	忘记密码答案
 * @param aFPALength	-	忘记密码答案长度
 * @param aReLoginLimit	-	允许用户在不同的设备同时进行登录的个数
 * @param aSecurityCode	-	安全校验码，由{@link #IOTGetSecurityCode}生成
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link #IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return	0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTChangeUserInfo(byte[] aUserName, short aUserNameLength, byte[] aPassword, short aPasswordLength, 
							byte[] aMobile, short aMobileLength, byte[] aEMail, short aEMailLength, 
							byte[] aFPQuestion, short aFPQLength, byte[] aFPAnswer, short aFPALength, 
							long aReLoginLimit, int aSecurityCode, long aAuthID);

/**
 * 获取指定设备的基础信息。
 * @param aDevID	-	指定的设备ID
 * @param aType	-	输出参数。设备的类型，详见：EDEVICE_TYPE
 * @param aModel	-	输出参数。设备的型号
 * @param aVersion	-	输出参数。设备的固件版本
 * @param aRegisterSpace	-	输出参数。设备的寄存器大小
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRetriveDeviceInfo(long aDevID, short[] aType, short[] aModel, int[] aVersion, int[] aRegisterSpace);
/**
 * 获取一批设备的基础信息。
 * @param aDevList	-	输入兼输出参数。输入时表示需要获取信息的设备清单，输出时表示实际获取到信息的设备清单。一批清单最多含16台设备
 * @param aType	-	输出参数。设备的类型，详见：EDEVICE_TYPE
 * @param aModel	-	输出参数。设备的型号
 * @param aVersion	-	输出参数。设备的固件版本
 * @param aRegisterSpace	-	输出参数。设备的寄存器大小
 * @param aListSize	-	输入兼输出参数。输入时表示需要获取信息的设备清单大小，输出里表示实际获取到信息的设备数量。其限定了aDevList、aType、aModel、aVersion、aRegisterSpace参数的数组尺寸，最大为16
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTRetriveDeviceInfoList(long[] aDevList, short[] aType, short[] aModel, int[] aVersion, int[] aRegisterSpace, int[] aListSize);

/**
 * 获取指定用户ID的用户名称。
 * @param aUserID	-	指定的用户ID
 * @param aName	-	输出参数。有效的用户名称
 * @param aNameLength	-	输入兼输出参数。输入时表示aName参数的缓冲区大小，输出时表示aName中有效的字符串长度
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRetriveUserName(long aUserID, byte[] aName, short[] aNameLength);
/**
 * 获取指定用户的ID。
 * @param aName	-	输入参数。有效的用户名称
 * @param aNameLength	-	aName参数的有效字符串大小
 * @param aUserID	-	输出参数。指定用户的ID
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTRetriveUserID(byte[] aName, short aNameLength, long[] aUserID);

/**
 * 通过密码找回当前登录或授权用户的用户信息。
 * @param aPassword	-	输入参数。当前登录的用户密码
 * @param aPasswordLength	-	密码长度
 * @param aMobile	-	输出参数。移动手机号码
 * @param aMobileLength	-	输入兼输出参数。输入时表示aMobile参数的缓冲区大小，输出时表示aMobile中有效的字符串长度
 * @param aEMail	-	输出参数。电子邮箱
 * @param aEMailLength	-	输入兼输出参数。输入时表示aEMail参数的缓冲区大小，输出时表示aEMail中有效的字符串长度
 * @param aFPQuestion	-	输出参数。忘记密码问题
 * @param aFPQLength	-	输入兼输出参数。输入时表示aFQuestion参数的缓冲区大小，输出时表示aFQuestion中有效的字符串长度
 * @param aFPAnswer	-	输出参数。忘记密码答案
 * @param aFPALength	-	输入兼输出参数。输入时表示aFPAnswer参数的缓冲区大小，输出时表示aFPAnswer中有效的字符串长度
 * @param aReLoginLimit	-	输出参数。允许用户在不同的设备同时进行登录的个数
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRetriveUserInfo(byte[] aPassword, short aPasswordLength,
								byte[] aMobile, short[] aMobileLength, byte[] aEMail, short[] aEMailLength, 
								byte[] aFPQuestion, short[] aFPQLength, byte[] aFPAnswer, short[] aFPALength, 
								long[] aReLoginLimit, long aAuthID);

/**
 * 从CCLIOT服务器中获取当前登录或授权用户用户下有权限关系的第一个设备ID。
 * @deprecated 建议使用{@link #IOTGetOnlineDeviceListFirst}以获得更佳性能
 * @param aID	-	输出参数。用于获取下一个设备ID的索引号
 * @param aDevID	-	输出参数。设备ID
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetOnlineDeviceFirst(long[] aID, long[] aDevID, long aAuthID);
/**
 * 从CCLIOT服务器中获取当前登录或授权用户用户下有权限关系的下一个设备ID。
 * @deprecated 建议使用{@link #IOTGetOnlineDeviceListNext}以获得更佳性能
 * @param aID	-	输入兼输出参数。输入时表示上一个设备ID的索引，可以从{@link #IOTGetOnlineDeviceFirst}函数取得或从上一次调用{@link #IOTGetOnlineDeviceNext}函数时取得，输出时表示用于获取下一个设备ID的索引号
 * @param aDevID	-	输出参数。设备ID
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetOnlineDeviceNext(long[] aID, long[] aDevID, long aAuthID);
/**
 * 从CCLIOT服务器中获取当前登录或授权用户用户下有权限关系的第一批设备清单。
 * @param aID	-	输出参数。用于获取下一批设备清单的索引号
 * @param aDeviceList	-	输出参数。设备ID清单，一批清单最多含16台设备
 * @param aCount	-	输入兼输出参数。输入时表示aDeviceList可容纳的最大设备数量(内存分配大小/8)，输出时表示aDeviceList被填充的设备数量
 * @param aRemain	-	输出参数。0表示无剩余设备(即本次调用已取得所有在线设备)，非0表示还有剩余设备(即调用{@link #IOTGetOnlineDeviceListNext}还可取得更多在线设备)
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetOnlineDeviceListFirst(long[] aID, long[] aDeviceList, short[] aCount, short[] aRemain, long aAuthID);
/**
 * 从CCLIOT服务器中获取当前登录或授权用户用户下有权限关系的下一批设备清单。
 * @param aID	-	输入兼输出参数。输入时表示上一批设备的索引，可以从{@link #IOTGetOnlineDeviceListFirst}函数取得或从上一次调用{@link #IOTGetOnlineDeviceListNext}函数时取得，输出时表示用于获取下一批设备的索引号
 * @param aDeviceList	-	输出参数。设备ID清单，一批清单最多含16台设备
 * @param aCount	-	输入兼输出参数。输入时表示aDeviceList可容纳的最大设备数量(内存分配大小/8)，输出时表示aDeviceList被填充的设备数量
 * @param aRemain	-	输出参数。0表示无剩余设备(即本次调用已取得所有在线设备)，非0表示还有剩余设备(即再次调用还可取得更多在线设备)
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetOnlineDeviceListNext(long[] aID, long[] aDeviceList, short[] aCount, short[] aRemain, long aAuthID);

/**
 * 获取指定设备的扩展信息版本。
 * @deprecated 建议使用IOTGetDeviceInfoVersionList以获得更佳性能
 * <p>声明：当不使用本地高速缓存时建议使用此函数先获取版本号并缓存在内存中再获取所有的扩展信息，
 * 当下一次再次获取所有扩展信息时，再获取一次版本号并与上一次的版本号进行比对，如版本号一致则无需再次获取，如版本号不一致才重新获取</p>
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aVersion	-	输出参数。指定设备的扩展信息版本
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetDeviceInfoVersion(long aDevID, int[] aVersion, long aAuthID);
/**
 * 获取一批设备的扩展信息版本。
 * <p>声明：当不使用本地高速缓存时建议使用此函数先获取版本号并缓存在内存中再获取所有的扩展信息，
 * 当下一次再次获取所有扩展信息时，再获取一次版本号并与上一次的版本号进行比对，如版本号一致则无需再次获取，如版本号不一致才重新获取</p>
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aListSize	-	输入兼输出参数。输入时表示需要获取版本信息的设备清单大小，输出里表示实际获取到版本信息的设备数量。其限定了aDevList及aVersionList参数的数组尺寸，最大为16
 * @param aDevList	-	输入兼输出参数。输入时表示需要获取版本信息的设备清单，输出时表示实际获取到版本信息的设备清单。一批清单最多含16台设备
 * @param aVersionlist	-	输出参数。获取到的版本信息清单，与aDevList数组索引相对应。数组大小应大于或等于aListSize
 * @param aAuthID	-	操作此函数所使用的授权ID，通过IOTRequestAuthID获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTGetDeviceInfoVersionList(int[] aListSize, long[] aDevList, int[] aVersionList, long aAuthID);

/**
 * 获取指定设备的扩展信息数量。
 * <p>声明：除特殊情况外，不建议使用此函数，推荐使用{@link #IOTUpdateDeviceInfoList}配合{@link #IOTGetDeviceInfoFirst}及{@link #IOTGetDeviceInfoNext}进行设备扩展信息的读取以获得更好的性能</p>
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aCount	-	输出参数。指定设备的扩展信息数量
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetDeviceInfoCount(long aDevID, long[] aCount, long aAuthID);
/**
 * 为指定设备添加扩展信息。
 * <p>注意：只有设备的拥有者方可编辑其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aName	-	输入参数。扩展信息的名称，名称具有唯一性，即同一个设备只允许有一个此名称的扩展信息。以任意ASCII字符组成的16位以内字符串
 * @param aNameLength	-	扩展信息名称的长度
 * @param aValue	-	输入参数。扩展信息的内容。以任意ASCII字符组成的64位以内字符串
 * @param aValueLength	-	扩展信息的内容长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTAddDeviceInfo(long aDevID, byte[] aName, short aNameLength, byte[] aValue, short aValueLength, long aAuthID);
/**
 * 编辑指定设备的扩展信息。
 * <p>注意：只有设备的拥有者方可编辑其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aName	-	输入参数。扩展信息的名称
 * @param aNameLength	-	扩展信息名称的长度
 * @param aValue	-	输入参数。扩展信息的内容。以任意ASCII字符组成的64位以内字符串
 * @param aValueLength	-	扩展信息的内容长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTEditDeviceInfo(long aDevID, byte[] aName, short aNameLength, byte[] aValue, short aValueLength, long aAuthID);
/**
 * 删除指定设备的扩展信息。
 * <p>注意：只有设备的拥有者方可编辑其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aName	-	输入参数。扩展信息的名称
 * @param aNameLength	-	扩展信息名称的长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRemoveDeviceInfo(long aDevID, byte[] aName, short aNameLength, long aAuthID);
/**
 * 查询指定设备的扩展信息。
 * <p>声明：除特殊情况外，不建议使用此函数，推荐使用{@link #IOTUpdateDeviceInfoList}配合{@link #IOTGetDeviceInfoFirst}及{@link #IOTGetDeviceInfoNext}进行设备扩展信息的读取以获得更好的性能</p>
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aName	-	输入参数。扩展信息的名称
 * @param aNameLength	-	扩展信息名称的长度
 * @param aValue	-	输出参数。扩展信息的内容
 * @param aValueLength	-	输入兼输出参数。输入时表示aValue参数的缓冲区大小，输出时表示aValue参数中有效的字符串长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTQueryDeviceInfo(long aDevID, byte[] aName, short aNameLength, byte[] aValue, short[] aValueLength, long aAuthID);
/**
 * 更新指定设备的所有扩展信息至本地信息数据库。
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTUpdateDeviceInfoList(long aDevID, long aAuthID);
/**
 * 获取指定设备的第一项扩展信息
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aID	-	输出参数。用于获取下一项扩展信息的索引号
 * @param aName	-	输出参数。扩展信息的名称
 * @param aNameLength	-	输入兼输出参数。输入时表示aName参数的缓冲区大小，输出时表示aName参数中有效的字符串长度
 * @param aValue	-	输出参数。扩展信息的内容
 * @param aValueLength	-	输入兼输出参数。输入时表示aValue参数的缓冲区大小，输出时表示aValue参数中有效的字符串长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetDeviceInfoFirst(long aDevID, long[] aID, byte[] aName, short[] aNameLength, byte[] aValue, short[] aValueLength, long aAuthID);
/**
 * 获取指定设备的第一批扩展信息
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aID	-	输出参数。用于获取下一项扩展信息的索引号
 * @param aName	-	输出参数。装载扩展信息的名称清单，每一项名称占用空间为KINFO_NAME_MAX_LENGTH，其内存分配最少应满足aListSize*KINFO_NAME_MAX_LENGTH，否则将造成内存泄漏
 * @param aNameLength	-	输出参数。装载每一项名称清单的字符串长度，其内存分配最少应满足aListSize*2，否则将造成内存泄漏
 * @param aValue	-	输出参数。装载扩展信息的内容清单，每一项名称占用空间为KINFO_VALUE_MAX_LENGTH，其内存分配最少应满足aListSize*KINFO_VALUE_MAX_LENGTH，否则将造成内存泄漏
 * @param aValueLength	-	输出参数。装载每一项内容清单的字符串长度，其内存分配最少应满足aListSize*2，否则将造成内存泄漏
 * @param aListSize	-	输入兼输出参数。输入时表示批次获取的最大信息数量，输出时表示实际获取到的信息数量，一批清单最多含4条扩展信息
 * @param aRemain	-	输出参数。0表示无剩余信息(即本次调用已取得所有信息)，非0表示还有剩余信息(即调用IOTGetDeviceInfoListNext还可取得更多信息)
 * @param aAuthID	-	操作此函数所使用的授权ID，通过IOTRequestAuthID获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int  IOTGetDeviceInfoListFirst(long aDevID, long[] aID, byte[] aName, short[] aNameLength, byte[] aValue, short[] aValueLength, int[] aListSize, int[] aRemain, long aAuthID);
/**
 * 获取指定设备的下一项扩展信息
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aID	-	输入兼输出参数。输入时表示上一项扩展信息的索引，可以从{@link #IOTGetDeviceInfoFirst}函数取得或从上一次调用{@link #IOTGetDeviceInfoNext}函数时取得，输出时表示用于获取下一项扩展信息的索引号
 * @param aName	-	输出参数。扩展信息的名称
 * @param aNameLength	-	输入兼输出参数。输入时表示aName参数的缓冲区大小，输出时表示aName参数中有效的字符串长度
 * @param aValue	-	输出参数。扩展信息的内容
 * @param aValueLength	-	输入兼输出参数。输入时表示aValue参数的缓冲区大小，输出时表示aValue参数中有效的字符串长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetDeviceInfoNext(long aDevID, long[] aID, byte[] aName, short[] aNameLength, byte[] aValue, short[] aValueLength, long aAuthID);
/**
 * 获取指定设备的下一批扩展信息
 * <p>注意：只有拥有对设备的读取权限方可读取其扩展信息</p>
 * @param aDevID	-	指定设备的ID
 * @param aID	-	输入兼输出参数。输入时表示上一批扩展信息的索引，可以从IOTGetDeviceInfoListFirst函数取得或从上一次调用此函数时取得，输出时表示用于获取下一批扩展信息的索引号
 * @param aName	-	输出参数。装载扩展信息的名称清单，每一项名称占用空间为KINFO_NAME_MAX_LENGTH，其内存分配最少应满足aListSize*KINFO_NAME_MAX_LENGTH，否则将造成内存泄漏
 * @param aNameLength	-	输出参数。装载每一项名称清单的字符串长度，其内存分配最少应满足aListSize*2，否则将造成内存泄漏
 * @param aValue	-	输出参数。装载扩展信息的内容清单，每一项名称占用空间为KINFO_VALUE_MAX_LENGTH，其内存分配最少应满足aListSize*KINFO_VALUE_MAX_LENGTH，否则将造成内存泄漏
 * @param aValueLength	-	输出参数。装载每一项内容清单的字符串长度，其内存分配最少应满足aListSize*2，否则将造成内存泄漏
 * @param aListSize	-	输入兼输出参数。输入时表示批次获取的最大信息数量，输出时表示实际获取到的信息数量，一批清单最多含4条扩展信息
 * @param aRemain	-	输出参数。0表示无剩余信息(即本次调用已取得所有信息)，非0表示还有剩余信息(即再次调用此函数还可取得更多信息)
 * @param aAuthID	-	操作此函数所使用的授权ID，通过IOTRequestAuthID获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTGetDeviceInfoListNext(long aDevID, long[] aID, byte[] aName, short[] aNameLength, byte[] aValue, short[] aValueLength, int[] aListSize, int[] aRemain, long aAuthID);

/**
 * 获取当前登录或授权用户的扩展信息版本。
 * <p>声明：当不使用本地高速缓存时建议使用此函数先获取版本号并缓存在内存中再获取所有的扩展信息，
 * 当下一次再次获取所有扩展信息时，再获取一次版本号并与上一次的版本号进行比对，如版本号一致则无需再次获取，如版本号不一致才重新获取</p>
 * <p>注：私有扩展信息为CCLIOT服务器为区分或调度用户所持有，用户不可取得；公共扩展信息为用户自行加入的扩展信息，其公共程度只是相对于CCLIOT服务器而言，其它用户并不能获取</p>
 * @param aVersion	-	输出参数。当前登录用户的扩展信息版本
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetUserInfoVersion(int[] aVersion, long aAuthID);
/**
 * 获取当前登录或授权用户的扩展信息数量。
 * <p>注意：此函数所获取的扩展信息数量包括私有或公共的扩展信息总和，对数据判断可能没有价值，因此不建议使用此函数，推荐使用{@link #IOTUpdatePublicUserInfoList}配合{@link #IOTGetPublicUserInfoFirst}及{@link #IOTGetPublicUserInfoNext}进行用户扩展信息的读取以获得更好的性能</p>
 * <p>注：私有扩展信息为CCLIOT服务器为区分或调度用户所持有，用户不可取得；公共扩展信息为用户自行加入的扩展信息，其公共程度只是相对于CCLIOT服务器而言，其它用户并不能获取</p>
 * @param aCount	-	输出参数。当前登录用户的扩展信息数量
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetUserInfoCount(long[] aCount, long aAuthID);
/**
 * 为当前登录或授权用户添加公共扩展信息。
 * @param aName	-	输入参数。扩展信息的名称，名称具有唯一性，即同一个用户只允许有一个此名称的扩展信息。以任意ASCII字符组成的16位以内字符串
 * @param aNameLength	-	扩展信息名称的长度
 * @param aValue	-	输入参数。扩展信息的内容。以任意ASCII字符组成的64位以内字符串
 * @param aValueLength	-	扩展信息的内容长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTAddPublicUserInfo(byte[] aName, short aNameLength, byte[] aValue, short aValueLength, long aAuthID);
/**
 * 编辑当前登录或授权用户的公共扩展信息。
 * @param aName	-	输入参数。扩展信息的名称
 * @param aNameLength	-	扩展信息名称的长度
 * @param aValue	-	输入参数。扩展信息的内容。以任意ASCII字符组成的64位以内字符串
 * @param aValueLength	-	扩展信息的内容长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTEditPublicUserInfo(byte[] aName, short aNameLength, byte[] aValue, short aValueLength, long aAuthID);
/**
 * 删除当前登录或授权用户的公共扩展信息。
 * @param aName	-	输入参数。扩展信息的名称
 * @param aNameLength	-	扩展信息名称的长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRemovePublicUserInfo(byte[] aName, short aNameLength, long aAuthID);
/**
 * 查询当前登录或授权用户的公共扩展信息。
 * <p>声明：除特殊情况外，不建议使用此函数，推荐使用{@link #IOTUpdatePublicUserInfoList}配合{@link #IOTGetPublicUserInfoFirst}及{@link #IOTGetPublicUserInfoNext}进行用户扩展信息的读取以获得更好的性能</p>
 * @param aName	-	输入参数。扩展信息的名称
 * @param aNameLength	-	扩展信息名称的长度
 * @param aValue	-	输出参数。扩展信息的内容
 * @param aValueLength	-	输入兼输出参数。输入时表示aValue参数的缓冲区大小，输出时表示aValue参数中有效的字符串长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTQueryPublicUserInfo(byte[] aName, short aNameLength, byte[] aValue, short[] aValueLength, long aAuthID);
/**
 * 更新当前登录或授权用户的所有公共扩展信息至本地信息数据库。
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTUpdatePublicUserInfoList(long aAuthID);
/**
 * 获取当前登录或授权用户的第一项公共扩展信息。
 * @param aID	-	输出参数。用于获取下一项扩展信息的索引号
 * @param aName	-	输出参数。扩展信息的名称
 * @param aNameLength	-	输入兼输出参数。输入时表示aName参数的缓冲区大小，输出时表示a那么参数中有效的字符串长度
 * @param aValue	-	输出参数。扩展信息的内容
 * @param aValueLength	-	输入兼输出参数。输入时表示aValue参数的缓冲区大小，输出时表示aValue参数中有效的字符串长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetPublicUserInfoFirst(long[] aID, byte[] aName, short[] aNameLength, byte[] aValue, short[] aValueLength, long aAuthID);
/**
 * 获取当前登录或授权用户的第一批公共扩展信息。
 * @param aID	-	输出参数。用于获取下一批扩展信息的索引号
 * @param aName	-	输出参数。装载扩展信息的名称清单，每一项名称占用空间为KINFO_NAME_MAX_LENGTH，其内存分配最少应满足aListSize*KINFO_NAME_MAX_LENGTH，否则将造成内存泄漏
 * @param aNameLength	-	输出参数。装载每一项名称清单的字符串长度，其内存分配最少应满足aListSize*2，否则将造成内存泄漏
 * @param aValue	-	输出参数。装载扩展信息的内容清单，每一项名称占用空间为KINFO_VALUE_MAX_LENGTH，其内存分配最少应满足aListSize*KINFO_VALUE_MAX_LENGTH，否则将造成内存泄漏
 * @param aValueLength	-	输出参数。装载每一项内容清单的字符串长度，其内存分配最少应满足aListSize*2，否则将造成内存泄漏
 * @param aListSize	-	输入兼输出参数。输入时表示批次获取的最大信息数量，输出时表示实际获取到的信息数量，一批清单最多含4条扩展信息
 * @param aRemain	-	输出参数。0表示无剩余信息(即本次调用已取得所有信息)，非0表示还有剩余信息(即调用IOTGetPublicUserInfoListNext还可取得更多信息)
 * @param aAuthID	-	操作此函数所使用的授权ID，通过IOTRequestAuthID获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTGetPublicUserInfoListFirst(long[] aID, byte[] aName, short[] aNameLength, byte[] aValue, short[] aValueLength, int[] aListSize, int[] aRemain, long aAuthID);

/**
 * 获取当前登录或授权用户的下一项公共扩展信息。
 * @param aID	-	输入兼输出参数。输入时表示上一项扩展信息的索引，可以从{@link #IOTGetPublicUserInfoFirst}函数取得或从上一次调用{@link #IOTGetPublicUserInfoNext}函数时取得，输出时表示用于获取下一项扩展信息的索引号
 * @param aName	-	输出参数。扩展信息的名称
 * @param aNameLength	-	输入兼输出参数。输入时表示aName参数的缓冲区大小，输出时表示a那么参数中有效的字符串长度
 * @param aValue	-	输出参数。扩展信息的内容
 * @param aValueLength	-	输入兼输出参数。输入时表示aValue参数的缓冲区大小，输出时表示aValue参数中有效的字符串长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetPublicUserInfoNext(long[] aID, byte[] aName, short[] aNameLength, byte[] aValue, short[] aValueLength, long aAuthID);
/**
 * 获取当前登录或授权用户的下一批公共扩展信息。
 * @param aID	-	输入兼输出参数。输入时表示上一批扩展信息的索引，可以从IOTGetPublicUserInfoListFirst函数取得或从上一次调用此函数时取得，输出时表示用于获取下一批扩展信息的索引号
 * @param aName	-	输出参数。装载扩展信息的名称清单，每一项名称占用空间为KINFO_NAME_MAX_LENGTH，其内存分配最少应满足aListSize*KINFO_NAME_MAX_LENGTH，否则将造成内存泄漏
 * @param aNameLength	-	输出参数。装载每一项名称清单的字符串长度，其内存分配最少应满足aListSize*2，否则将造成内存泄漏
 * @param aValue	-	输出参数。装载扩展信息的内容清单，每一项名称占用空间为KINFO_VALUE_MAX_LENGTH，其内存分配最少应满足aListSize*KINFO_VALUE_MAX_LENGTH，否则将造成内存泄漏
 * @param aValueLength	-	输出参数。装载每一项内容清单的字符串长度，其内存分配最少应满足aListSize*2，否则将造成内存泄漏
 * @param aListSize	-	输入兼输出参数。输入时表示批次获取的最大信息数量，输出时表示实际获取到的信息数量，一批清单最多含4条扩展信息
 * @param aRemain	-	输出参数。0表示无剩余信息(即本次调用已取得所有信息)，非0表示还有剩余信息(即调用此函数还可取得更多信息)
 * @param aAuthID	-	操作此函数所使用的授权ID，通过IOTRequestAuthID获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTGetPublicUserInfoListNext(long[] aID, byte[] aName, short[] aNameLength, byte[] aValue, short[] aValueLength, int[] aListSize, int[] aRemain, long aAuthID);

/**
 * 向指定的设备请求权限。
 * <p>注意：请求授予权限时具体分配的权限和分配时间由拥有者或未被拥有的设备自行定义，抛弃权限时立即生效，无需设备或其拥有者干涉</p>
 * @param aDevID	-	指定设备的ID
 * @param aRequestQuit	-	请求类型标示位。0表示请求授予权限，1表示抛弃已有权限
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTAuthRequest(long aDevID, int aRequestQuit, long aAuthID);
/**
 * 修改指定用户对指定设备的权限。
 * <p>注意：只有设备的拥有者方可修改设备的权限</p>
 * @param aAuthState	-	设备开放给用户的权限，详见：EAUTH_STATE
 * @param aUser	-	指定用户的ID
 * @param aDevID	-	指定设备的ID
 * @param aTimeout	-	权限有效时间。当有效时间设为0时表示永远有效，设置为其它值时表示超过指定的时间后用户的权限将恢复最后一次拥有的权限，单位：秒
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTAuthUpdate(int aAuthState, long aUser, long aDevID, long aTimeout, long aAuthID);

/**
 * 获取与当前登录或授权用户有权限关系的设备清单版本。
 * <p>声明：当不使用本地高速缓存时建议使用此函数先获取版本号并缓存在内存中再获取设备清单，
 * 当下一次再次获取设备清单时，再获取一次版本号并与上一次的版本号进行比对，如版本号一致则无需再次获取，如版本号不一致才重新获取</p>
 * @param aVersion	-	输出参数。设备清单的版本
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthDeviceVersion(int[] aVersion, long aAuthID);
/**
 * 获取与当前登录或授权用户有权限关系的设备数量，包括在线及离线的。
 * @param aCount	-	输出参数。设备的数量
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthDeviceCount(int[] aCount, long aAuthID);
/**
 * 获取与当前登录或授权用户有权限关系的第一个设备及其权限状态。
 * @deprecated 建议使用{@link #IOTGetAuthDeviceListFirst}以获得更佳性能
 * @param aID	-	输出参数。用于获取下一个有权限关系的设备及其权限状态的索引号
 * @param aDevID	-	输出参数。设备ID
 * @param aAuthState	-	输出参数。权限状态，详见：EAUTH_STATE
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthDeviceFirst(long[] aID, long[] aDevID, int[] aAuthState, long aAuthID);
/**
 * 获取与当前登录或授权用户有权限关系的下一个设备及其权限状态。
 * @deprecated 建议使用{@link #IOTGetAuthDeviceListNext}以获得更佳性能
 * @param aID	-	输入兼输出参数。输入时表示上一个权限关系的设备及其权限状态的索引，可以从{@link #IOTGetAuthDeviceFirst}函数取得或从上一次调用{@link #IOTGetAuthDeviceNext}函数时取得，输出时表示用于获取下一个有权限关系的设备及其权限状态的索引号
 * @param aDevID	-	输出参数。设备ID
 * @param aAuthState	-	输出参数。权限状态，详见：EAUTH_STATE
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthDeviceNext(long[] aID, long[] aDevID, int[] aAuthState, long aAuthID);
/**
 * 获取与当前登录或授权用户有权限关系的第一批设备及其权限状态。
 * @param aID	-	输出参数。用于获取下一批有权限关系的设备及其权限状态的索引号
 * @param aDeviceList	-	输出参数。设备ID清单，一批清单最多含16台设备
 * @param aAuthList	-	输出参数。权限状态清单，一批清单最多含16台设备的权限状态，详见：EAUTH_STATE
 * @param aCount	-	输入兼输出参数。输入时表示aDeviceList可容纳的最大设备数量(内存分配大小/8)及aAuthList的最大权限数量，输出时表示aDeviceList被填充的设备数量或aAuthList被填充的设备数量
 * @param aRemain	-	输出参数。0表示无剩余设备(即本次调用已取得所有有权限关系设备)，非0表示还有剩余设备(即调用IOTGetAuthDeviceListNext还可取得更多有权限关系设备)
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthDeviceListFirst(long[] aID, long[] aDeviceList, byte[] aAuthList, short[] aCount, short[] aRemain, long aAuthID);
/**
 * 获取与当前登录或授权用户有权限关系的下一批设备及其权限状态。
 * @param aID	-	输入兼输出参数。输入时表示上一批权限关系的设备及其权限状态的索引，可以从{@link #IOTGetAuthDeviceListFirst}函数取得或从上一次调用{@link #IOTGetAuthDeviceListNext}函数时取得，输出时表示用于获取下一个有权限关系的设备及其权限状态的索引号
 * @param aDeviceList	-	输出参数。设备ID清单，一批清单最多含16台设备
 * @param aAuthList	-	输出参数。权限状态清单，一批清单最多含16台设备的权限状态，详见：EAUTH_STATE
 * @param aCount	-	输入兼输出参数。输入时表示aDeviceList可容纳的最大设备数量(内存分配大小/8)及aAuthList的最大权限数量，输出时表示aDeviceList被填充的设备数量或aAuthList被填充的设备数量
 * @param aRemain	-	输出参数。0表示无剩余设备(即本次调用已取得所有有权限关系设备)，非0表示还有剩余设备(即再次调用还可取得更多有权限关系设备)
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthDeviceListNext(long[] aID, long[] aDeviceList, byte[] aAuthList, short[] aCount, short[] aRemain, long aAuthID);

/**
 * 获取与指定设备有权限关系的用户清单版本。
 * <p>声明：当不使用本地高速缓存时建议使用此函数先获取版本号并缓存在内存中再获取用户清单，
 * 当下一次再次获取用户清单时，再获取一次版本号并与上一次的版本号进行比对，如版本号一致则无需再次获取，如版本号不一致才重新获取</p>
 * <p>注意：只有设备的拥有者方可读取设备关联的用户</p>
 * @param aDevID	-	指定设备的ID
 * @param aVersion	-	输出参数。用户清单的版本
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthUserVersion(long aDevID, int[] aVersion, long aAuthID);
/**
 * 获取与指定设备有权限关系的用户数量，包括在线及离线的。
 * <p>注意：只有设备的拥有者方可读取设备关联的用户</p>
 * @param aDevID	-	指定设备的ID
 * @param aCount	-	输出参数。用户的数量
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthUserCount(long aDevID, int[] aCount, long aAuthID);
/**
 * 获取与指定设备有权限关系的第一个用户及其权限状态。
 * <p>注意：只有设备的拥有者方可读取设备关联的用户</p>
 * @param aDevID	-	指定设备的ID
 * @param aID	-	输出参数。用于获取下一个有权限关系的用户及其权限状态的索引号
 * @param aUserID	-	输出参数。用户ID
 * @param aAuthState	-	输出参数。权限状态，详见：EAUTH_STATE
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthUserFirst(long aDevID, long[] aID, long[] aUserID, int[] aAuthState, long aAuthID);
/**
 * 获取与指定设备有权限关系的第一个用户及其权限状态。
 * <p>注意：只有设备的拥有者方可读取设备关联的用户</p>
 * @param aDevID	-	指定设备的ID
 * @param aID	-	输入兼输出参数。输入时表示上一个权限关系的用户及其权限状态的索引，可以从{@link #IOTGetAuthUserFirst}函数取得或从上一次调用{@link #IOTGetAuthUserNext}函数时取得，输出时表示用于获取下一个有权限关系的用户及其权限状态的索引号
 * @param aUserID	-	输出参数。用户ID
 * @param aAuthState	-	输出参数。权限状态，详见：EAUTH_STATE
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetAuthUserNext(long aDevID, long[] aID, long[] aUserID, int[] aAuthState, long aAuthID);

/**
 * 读取指定设备的寄存器以往的改变记录。
 * aAddress与aSize参数相互影响读取到的结果，只要寄存器改变记录中的数量与aAddress及aSize存在交互则条件成立，均输入0则表示接受任何改变
 * <p>注意：只有拥有对设备的读取权限方可读取其寄存器以往的改变记录</p>
 * @param aDevID	-	指定设备的ID
 * @param aRefID	-	表示改变记录的参考ID，输入0表示获取最后一次改变的记录，输入通过当前函数返回的aLogID可得到相对于aLogID的上一次改变数据
 * @param aLogID	-	输出参数。返回寄存器改变记录的参考ID
 * @param aLogTime	-	输出参数。返回寄存器改变记录的时间戳，可通过{@link #IOTSplitTime}解释其所对应的具体时间值
 * @param aAddress	-	输入兼输出参数。输入时表示希望读取被改变的寄存器记录中有交叉的起始地址，输出时表示改变的寄存器实际起始地址
 * @param aSize	-	输入兼输出参数。输入时表示希望读取被改变的寄存器记录中有交叉的最大长度，输入0表示接受所有改变，输出时表示已改变的的寄存器数据长度
 * @param aData	-	改变后的寄存器数据，数据长度为aSize
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTReadRegChangeLogPrev(long aDevID, long aRefID, long[] aLogID, long[] aLogTime, short[] aAddress, short[] aSize, byte[] aData, long aAuthID);

/**
 * 获取当前登录或授权用户所建立的批处理清单版本或指定批处理项目清单版本。
 * @param aBatchID	-	指定批处理的ID，如此批处理ID指定为0则表示获取当前登录用户或授权用户所建立的批处理清单版本，如不为0则表示获取指定批处理项目清单版本
 * @param aVersion	-	输出参数。批处理清单版本或指定批处理项目清单版本
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetBatchVersion(long aBatchID, long[] aVersion, long aAuthID);
/**
 * 为当前登录或授权用户添加一个批处理命令。
 * 批处理命令的作用就是通过一个命令将关联设备的寄存器快速切换至设定的状态。
 * @param aName	-	输入参数。批处理命令名称。批处理名称具有唯一性，即同一个用户由任意ASCII字符组成的32位以内字符串
 * @param aNameLength	-	批处理命令名称长度
 * @param aID	-	输出参数。成功创建的批处理ID，此ID由CCLIOT服务器自动生成，并具有唯一性
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTAddBatch(byte[] aName, short aNameLength, long[] aID, long aAuthID);
/**
 * 编辑当前登录或授权用户所建立的指定批处理命令名称。
 * @param aID	-	指定批处理的ID，由{@link #IOTAddBbatch}、{@link #IOTGetBatchFirst}或{@link #IOTGetBatchNext}获得的唯一批处理ID
 * @param aName	-	输入参数。批处理命令名称。批处理名称具有唯一性，即同一个用户由任意ASCII字符组成的32位以内字符串
 * @param aNameLength	-	批处理命令名称长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTEditBatch(long aBatchID, byte[] aName, int aNameLength, long aAuthID);
/**
 * 删除当前登录或授权用户所建立的一个批处理命令。
 * @param aID	-	由{@link #IOTAddBbatch}、{@link #IOTGetBatchFirst}或{@link #IOTGetBatchNext}获得的唯一批处理ID
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRemoveBatch(long aBatchID, long aAuthID);
/**
 * 获取当前登录或授权用户所建立的第一个批处理命令。
 * @param aBatchID	-	输出参数。批处理ID
 * @param aName	-	输出参数。批处理命令名称
 * @param aNameLength	-	输入兼输出参数。输入时表示aName参数的缓冲区大小，输出时表示aName参数中有效的字符串长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetBatchFirst(long[] aBatchID, byte[] aName, short[] aNameLength, long aAuthID);
/**
 * 获取当前登录或授权用户所建立的下一个批处理命令。
 * @param aBatchID	-	输入兼输出参数。输入时表示上一个批处理ID，由{@link #IOTGetBatchFirst}或上一次调用{@link #IOTGetBatchNext}获得；输出时表示获取到的批处理ID，同时用于获取下一个批处理命令
 * @param aName	-	输出参数。批处理命令名称
 * @param aNameLength	-	输入兼输出参数。输入时表示aName参数的缓冲区大小，输出时表示aName参数中有效的字符串长度
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetBatchNext(long[] aBatchID, byte[] aName, short[] aNameLength, long aAuthID);

/**
 * 向指定批处理命令添加一个项目。
 * 批处理的项目就是让指定的设备寄存器改变到一个固定的状态，因此输入参数与修改设备寄存器类似。
 * 为了更高效地执行批处理项目，建议同一个批处理中含有同一个设备的多块寄存器地址时尽可能合并连续的区块后再添加。
 * 如：aAddress=5，aSize=4与aAddress=9，aSize=6应合并为aAddress=5，aSize=10
 * @param aBatchID	-	指定批处理的ID
 * @param aDevID	-	批处理项目所关联的设备ID
 * @param aAddress	-	批处理项目所操作设备的寄存器起始地址
 * @param aSize	-	批处理项目所操作设备的寄存器数据大小，即aData的有效数据区域大小
 * @param aData	-	输入参数。批处理项目所操作设备的寄存器数据
 * @param aItemID	-	输出参数。成功添加的批处理命令项目ID，此ID由CCLIOT服务器自动生成，并具有唯一性
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTAddBatchItem(long aBatchID, long aDevID, short aAddress, short aSize, byte[] aData, long[] aItemID, long aAuthID);
/**
 * 编辑指定批处理命令的指定项目。
 * @param aBatchID	-	指定批处理的ID
 * @param aItemID	-	指定批处理项目的ID
 * @param aDevID	-	批处理项目所关联的设备ID
 * @param aAddress	-	批处理项目所操作设备的寄存器起始地址
 * @param aSize	-	批处理项目所操作设备的寄存器数据大小，即aData的有效数据区域大小
 * @param aData	-	输入参数。批处理项目所操作设备的寄存器数据
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTEditBatchItem(long aBatchID, long aItemID, long aDevID, short aAddress, short aSize, byte[] aData, long aAuthID);
/**
 * 删除指定批处理命令的指定项目。
 * @param aBatchID	-	指定批处理的ID
 * @param aItemID	-	指定批处理项目的ID
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTRemoveBatchItem(long aBatchID, long aItemID, long aAuthID);
/**
 * 获取指定批处理命令的第一个批处理项目。
 * @param aBatchID	-	指定批处理的ID
 * @param aItemID	-	输出参数。第一个批处理项目的ID
 * @param aDevID	-	输出参数。批处理项目所关联的设备ID
 * @param aAddress	-	输出参数。批处理项目所操作设备的寄存器起始地址
 * @param aSize	-	输出参数。批处理项目所操作设备的寄存器数据大小，即aData的有效数据区域大小
 * @param aData	-	输出参数。批处理项目所操作设备的寄存器数据
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetBatchItemFirst(long aBatchID, long[] aItemID, long[] aDevID, short[] aAddress, short[] aSize, byte[] aData, long aAuthID);
/**
 * 获取指定批处理命令的下一个批处理项目。
 * @param aBatchID	-	指定批处理的ID
 * @param aItemID	-	输入兼输出参数。输入时表示上一个批处理项目的ID，由{@link #IOTGetBatchItemFirst}或上一次调用{@link #IOTGetBatchItemNext}获得；输出时表示获取到的批处理项目ID，同时用于获取下一个批处理项目
 * @param aDevID	-	输出参数。批处理项目所关联的设备ID
 * @param aAddress	-	输出参数。批处理项目所操作设备的寄存器起始地址
 * @param aSize	-	输出参数。批处理项目所操作设备的寄存器数据大小，即aData的有效数据区域大小
 * @param aData	-	输出参数。批处理项目所操作设备的寄存器数据
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetBatchItemNext(long aBatchID, long[] aItemID, long[] aDevID, short[] aAddress, short[] aSize, byte[] aData, long aAuthID);
/**
 * 执行指定批处理命令。
 * <p>注：当此函数的返回表示执行成功的结果时只代表服务器接受到了合理的请求并分发了相关的处理项目，并不代表¸关联的设备已执行相应的改变。</p>
 * @param aBatchID	-	指定批处理命令的ID
 * @param aAuthID	-	操作此函数所使用的授权ID，通过{@link IOTRequestAuthID}获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTExecuteBatch(long aBatchID, long aAuthID);
/**
 * 预览批处理命令执行效果。
 * @param aBatchID	-	指定批处理命令的ID
 * @param aAuthID	-	操作此函数所使用的授权ID，通过IOTRequestAuthID获取，用于子服务器或多账号应用开发，使用当前登录账号时输入0。
 * @return 0表示指定的批处理的执行效果将造成相应设备状态变化，非0表示错误代码，一般错误代码为EIOT_RESULT_NO_EFFECT，表示指定的批处理的执行效果将不会造成任何设备状态变化。其它错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTPreviewBatch(long aBatchID, long aAuthID);

/*
 * Upgrade functions
 */
/**
 * 在局域网中搜索接受指定升级信息的设备。
 * <p>注：只有设备的拥有者方可对设备进行固件升级</p>
 * <p>注意：此函数将产生400~1600毫秒的线程阻塞，请避免在UI线程中调用而影响体验</p>
 * @param aType	-	指定升级的设备类型，详见：EDEVICE_TYPE
 * @param aModel	-	指定升级的设备型号
 * @param aVersion	-	指定升级的设备固件版本号，此版本号为设备升级后的版本号
 * @param aCallBack	-	接受升级的设备信息回调函数
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTUpgradeScan(short aType, short aModel, int aVersion, IOTCallback.UpgradeDeviceInfoCallback aCallBack);
/**
 * 升级局域网中所有接受指定升级信息的设备。
 * 相关设备应该为通过{@link #IOTUpgradeScan}搜索到的相应设备。
 * <p>注：只有设备的拥有者方可对设备进行固件升级</p>
 * <p>注意：此函数为线程阻塞函数，建议在独立的线程中执行，函数一但调用其将一直阻塞调用线程直至所有设备升级成功或设备升级失败，请避免在UI线程中调用而影响体验</p>
 * @param aFile	-	输入参数。指定的升级固件二进制文件路径
 * @param aType	-	指定升级的设备类型，详见：EDEVICE_TYPE
 * @param aModel	-	指定升级的设备型号
 * @param aVersion	-	指定升级的设备固件版本号，此版本号为设备升级后的版本号
 * @param aCallBack	-	接受升级进度信息回调函数
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTUpgradeAll(byte[] aFile, short aType, short aModel, int aVersion, IOTCallback.UpgradeProgressCallback aCallBack);
/**
 * 升级局域网中所有接受指定升级信息的设备。
 * 相关设备应该为通过{@link #IOTUpgradeScan}搜索到的相应设备。
 * <p>注：只有设备的拥有者方可对设备进行固件升级</p>
 * <p>注意：此函数为线程阻塞函数，建议在独立的线程中执行，函数一但调用其将一直阻塞调用线程直至所有设备升级成功或设备升级失败，请避免在UI线程中调用而影响体验</p>
 * @param aBinary	-	输入参数。指定的升级固件二进制数据
 * @param aBinarySize	-	aBinary的数据大小
 * @param aType	-	指定升级的设备类型，详见：EDEVICE_TYPE
 * @param aModel	-	指定升级的设备型号
 * @param aVersion	-	指定升级的设备固件版本号，此版本号为设备升级后的版本号
 * @param aCallBack	-	接受升级进度信息回调函数
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTUpgradeAllByBinary(byte[] aBinary, int aBinarySize, short aType, short aModel, int aVersion, IOTCallback.UpgradeProgressCallback aCallBack);
/**
 * 升级局域网中指定的设备。
 * 设备的参数在通过{@link #IOTUpgradeScan}搜索时已经由回调函数接收。
 * <p>注：只有设备的拥有者方可对设备进行固件升级</p>
 * <p>注意：此函数为线程阻塞函数，建议在独立的线程中执行，函数一但调用其将一直阻塞调用线程直至设备升级成功或设备升级失败，请避免在UI线程中调用而影响体验</p>
 * @param aFile	-	输入参数。指定的升级固件二进制文件路径
 * @param aType	-	指定升级的设备类型，详见：EDEVICE_TYPE
 * @param aModel	-	指定升级的设备型号
 * @param aVersion	-	指定升级的设备固件版本号，此版本号为设备升级后的版本号
 * @param aDeviceIP	-	指定升级的设备的IP地址，执行{@link #IOTUpgradeScan}时回调函数可获得
 * @param aDevicePort	-	指定升级的设备的升级端口，执行{@link #IOTUpgradeScan}时回调函数可获得
 * @param aCallBack	-	接受升级进度信息回调函数
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTUpgradeOne(byte[] aFile, short aType, short aModel, int aVersion, int aDeviceIP, short aDevicePort, IOTCallback.UpgradeProgressCallback aCallBack);
/**
 * 升级局域网中指定的设备。
 * 设备的参数在通过{@link #IOTUpgradeScan}搜索时已经由回调函数接收。
 * <p>注：只有设备的拥有者方可对设备进行固件升级</p>
 * <p>注意：此函数为线程阻塞函数，建议在独立的线程中执行，函数一但调用其将一直阻塞调用线程直至设备升级成功或设备升级失败，请避免在UI线程中调用而影响体验</p>
 * @param aBinary	-	输入参数。指定的升级固件二进制数据
 * @param aBinarySize	-	aBinary的数据大小
 * @param aType	-	指定升级的设备类型，详见：EDEVICE_TYPE
 * @param aModel	-	指定升级的设备型号
 * @param aVersion	-	指定升级的设备固件版本号，此版本号为设备升级后的版本号
 * @param aDeviceIP	-	指定升级的设备的IP地址，执行{@link #IOTUpgradeScan}时回调函数可获得
 * @param aDevicePort	-	指定升级的设备的升级端口，执行{@link #IOTUpgradeScan}时回调函数可获得
 * @param aCallBack	-	接受升级进度信息回调函数
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTUpgradeOneByBinary(byte[] aBinary, int aBinarySize, short aType, short aModel, int aVersion, int aDeviceIP, short aDevicePort, IOTCallback.UpgradeProgressCallback aCallBack);

/**
 * 验证局域网中指定设备是否接受指定UUID及版本的功能补丁。
 * <p>注：只有设备的拥有者方可对设备进行补丁升级</p>
 * <p>注意：此函数将产生400~1600毫秒的线程阻塞，请避免在UI线程中调用而影响体验</p>
 * @param aDevID	-	指定升级的设备ID
 * @param aUUID	-	指定升级的补丁ID
 * @param aVersion	-	指定升级的补丁版本号
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTPatchVerify(long aDevID, int aUUID, int aVersion);
/**
 * 给局域网中指定的设备安装功能补丁。
 * <p>注：只有设备的拥有者方可对设备进行补丁升级</p>
 * <p>注意：此函数为线程阻塞函数，建议在独立的线程中执行，函数一但调用其将一直阻塞调用线程直至设备升级成功或设备升级失败，请避免在UI线程中调用而影响体验</p>
 * @param aFile	-	输入参数。指定的升级补丁二进制文件路径
 * @param aDevID	-	指定升级的设备ID
 * @param aUUID	-	指定升级的补丁ID
 * @param aVersion	-	指定升级的补丁版本号
 * @param aCallBack	-	接受升级进度信息回调函数
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTInstallPatch(byte[] aFile, long aDevID, int aUUID, int aVersion, IOTCallback.UpgradeProgressCallback aCallBack);
/**
 * 给局域网中指定的设备安装功能补丁。
 * <p>注：只有设备的拥有者方可对设备进行补丁升级</p>
 * <p>注意：此函数为线程阻塞函数，建议在独立的线程中执行，函数一但调用其将一直阻塞调用线程直至设备升级成功或设备升级失败，请避免在UI线程中调用而影响体验</p>
 * @param aBinary	-	输入参数。指定的升级固件二进制数据
 * @param aBinarySize	-	aBinary的数据大小
 * @param aDevID	-	指定升级的设备ID
 * @param aUUID	-	指定升级的补丁ID
 * @param aVersion	-	指定升级的补丁版本号
 * @param aCallBack	-	接受升级进度信息回调函数
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTInstallPatchByBinary(byte[] aBinary, int aBinarySize, long aDevID, int aUUID, int aVersion, IOTCallback.UpgradeProgressCallback aCallBack);

/*
 * Extend API functions
 */
/**
 * 转换一个64位整型数值为字符串表达形式，用于信息编码或压缩。
 * <p>注：此函数实质为32进制转换函数</p>
 * @param aIDIn	-	需转换的64位整型
 * @param aIDOut	-	输出参数。转换得出的字符串
 * @param aIDOutSize	-	输入兼输出参数。输入时表示aIDOut参数的缓冲区大小，输出时表示aIDOut参数中有效的字符串长度
 * @return 0表示成功，非0表示错误代码。错误代码详见：{@link EIOT_RESULT}相应枚举值
 */
protected static native int IOTGetStringID(long aIDIn, byte[] aIDOut, short[] aIDOutSize);
/**
 * 转换一个字符串为64位整型，字符串应该从{@link #IOTGetStringID}所获得或仅包含0~9,A~V的字符串，用于信息解码或解压缩。
 * @param aIDIn	-	输入参数。需转换的字符串
 * @param aIDInSize	-	输入参数。需转换的字符串长度
 * @return 转换成功的64位整型数值
 */
protected static native long IOTGetLongID(byte[] aIDIn, short aIDInSize);
/**
 * 将64位整型时间戳分解出具体的自然时间参数值
 * @param aTime	-	需分解的时间戳
 * @param aYear	-	输出参数。时间戳中包含的年份
 * @param aMonth	-	输出参数。时间戳中包含的月份
 * @param aDay	-	输出参数。时间戳中包含的日期(1~31)
 * @param aHour	-	输出参数。时间戳中包含的小时(0~23)
 * @param aMinute	-	输出参数。时间戳中包含的分钟(0~59)
 * @param aSecond	-	输出参数。时间戳中包含的秒(0~59)
 */
protected static native void IOTSplitTime(long aTime, int[] aYear, byte[] aMonth, byte[] aDay, byte[] aHour, byte[] aMinute, byte[] aSecond);
/**
 * 将字符型语言标识转换成CCLIOT系统支持的整型语言ID
 * @param aLangID	-	字符型语言标识，通过系统API取得。如en-US、zh-CN等
 * @param aLangIDLength	-	aLangID参数的有效字符长度
 * @return 转换后的整型语言ID
 */
protected static native short IOTGetLanguageIntID(byte[] aLangID, short aLangIDLength);

/*
 * Push API functions
 * <p>注意：所有推送函数为线程阻塞函数，建议在独立的线程中执行，函数一但调用其将一直阻塞调用线程直至与推送服务器的通讯失败</p>
 */
/**
 * 以当前登录的用户注册当前设备至推送服务器。
 * 此接口允许重复调用，但一般情况下只在用户登录成功或推送SDK返回可用Token时调用。
 * 如果此函数返回错误代码将导致其它所有推送函数均无法调用成功。
 * @param aToken	-	输入参数。推送SDK返回的Token，iOS系统由系统API回调得到
 * @param aTokenLength	-	aToken的数据长度
 * @param aSSID	-	输入兼输出参数。输入时使用上一次成功注册此设备时输出的值，输出时请保存在本地存储器中以作为下一次重新注册的值
 * @param aProtocol	-	推送协议，详见：
 * @param aLanguage	-	指定接收到的推送信息所使用的语言，通过IOTGetLanguageIntID取得
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTPushRegister(byte[] aToken, int aTokenLength, long[] aSSID, int aProtocol, int aLanguage);

/**
 * 从推送服务中移除当前设备
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTPushUnregister();

/**
 * 添加一个设备状态触发器到推送服务器。
 * 默认添加到推送服务器上的触发器将自动开启。
 * @param aDevID	-	触发器所关联的设备ID
 * @param aType	-	触发器类型，详见：EPUSH_TRIGGER_TYPE
 * @param aParam	-	触发参数，详见EPUSH_TRIGGER_TYPE中不同类型解释
 * @param aTarget	-	触发目标，输入0表示不触发额外目标
 * @param aDevName	-	触发器所关联的设备名称
 * @param aDevNameLength	-	触发器所关联的设备名称长度
 * @param aTriggerName	-	触发器名称
 * @param aTriggerNameLength	-	触发器名称长度
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTPushAddDeviceTrigger(long aDevID, int aType, int aParam, long aTarget, byte[] aDevName, short aDevNameLength, byte[] aTriggerName, short aTriggerNameLength);
/**
 * 从推送服务器删除一个指定的设备状态触发器。
 * @param aID	-	触发器所关联的设备ID，可通过IOTPushRetriveDeviceTrigger获得
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTPushRemoveDeviceTrigger(long aID);
/**
 * 从推送服务器删除一个指定设备的所有状态触发器。
 * @param aDevID	-	指定需要删除状态触发器的设备ID
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTPushRemoveDeviceAllTrigger(long aDevID);
/**
 * 从推送服务器查询一个指定设备的状态触发器。
 * @param aID	-	需查询的状态触发器索引ID
 * @param aDevID	-	输出参数。触发器所关联的设备ID
 * @param aType	-	输出参数。触发器类型，详见：EPUSH_TRIGGER_TYPE
 * @param aParam	-	输出参数。触发参数，详见EPUSH_TRIGGER_TYPE中不同类型解释
 * @param aTarget	-	输出参数。触发目标
 * @param aDevName	-	输出参数。触发器所关联的设备名称
 * @param aDevNameLength	-	输入兼输出参数。输入时表示aDevName参数的最大可接收长度，输出时表示找回的aDevName有效长度
 * @param aTriggerName	-	输出参数。触发器名称
 * @param aTriggerNameLength	-	输入兼输出参数。输入时表示aTriggerName参数的最大可接收长度，输出时表示找回的aTriggerName有效长度
 * @param aValid	-	输出参数。触发是否有效标识，0为无效，非0为有效。此值由服务器进行相关权限分析后自动设定，无法人工干预
 * @param aEnable	-	输出参数。触发是否开启标识，0为未开启，非0为开启
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTPushQueryDeviceTrigger(long aID, long[] aDevID, int[] aType, int[] aParam, long[] aTarget, byte[] aDevName, short[] aDevNameLength, byte[] aTriggerName, short[] aTriggerNameLength, int []aValid, int[] aEnable);

/**
 * 从推送服务器找回一个指定设备的状态触发器。
 * @param aDevID	-	触发器所关联的设备ID
 * @param aPrevID	-	需找回的触发器的前一个ID，输入0表示查找第一个，通过不断输入上一次调用此函数所返回的aID值可实现枚举关联设备的所有状态触发器
 * @param aID	-	输出参数。找回的状态触发器索引ID，用于删除或找回下一个状态触发器
 * @param aType	-	输出参数。触发器类型，详见：EPUSH_TRIGGER_TYPE
 * @param aParam	-	输出参数。触发参数，详见EPUSH_TRIGGER_TYPE中不同类型解释
 * @param aTarget	-	输出参数。触发目标
 * @param aDevName	-	输出参数。触发器所关联的设备名称
 * @param aDevNameLength	-	输入兼输出参数。输入时表示aDevName参数的最大可接收长度，输出时表示找回的aDevName有效长度
 * @param aTriggerName	-	输出参数。触发器名称
 * @param aTriggerNameLength	-	输入兼输出参数。输入时表示aTriggerName参数的最大可接收长度，输出时表示找回的aTriggerName有效长度
 * @param aValid	-	输出参数。触发是否有效标识，0为无效，非0为有效。此值由服务器进行相关权限分析后自动设定，无法人工干预
 * @param aEnable	-	输出参数。触发是否开启标识，0为未开启，非0为开启
 * @return 0表示成功，非0表示错误代码。错误代码详见：EIOT_RESULT相应枚举值
 */
protected static native int IOTPushRetriveDeviceTrigger(long aDevID, long aPrevID, long[] aID, int[] aType, int[] aParam, long[] aTarget, byte[] aDevName, short[] aDevNameLength, byte[] aTriggerName, short[] aTriggerNameLength, int []aValid, int[] aEnable);

}
